package business.threadRetrieve;

import iedcyt.acute.dataAccess.factories.AbsHtmlUnitFactoryDao;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * Clase que permite encapsular e iterar sobre un listado de UTIDs
 * @author 53385255R
 *
 */
public class UTIDList {

	/**
	 * Listado de utids
	 */
	private List<String> _utidList;
	
	private static volatile UTIDList _instance = null;
    
	/**
	 * @return instancia unica
	 */
	public static UTIDList getInstance() {
        if (_instance == null) {
            synchronized(UTIDList.class) {
                if (_instance == null)
                	_instance = new UTIDList(); 
            }
        }
        return _instance;
    }

	/**
	 * Constructor que carga el listado de UTIDs de base de datos
	 */
	private UTIDList() {
		//Inicializamos la lista de UTIDs
		_utidList = AbsHtmlUnitFactoryDao.getInstance().getUTIDDao().selectAll();
	}
	
	/**
	 * Obtiene el siguiente UTID de la lista y lo elimina.
	 * Si el UTID no es valido sigue procesando hasta encontrar uno valido
	 * 
	 * @return utid
	 */
	public synchronized String next() {
		String utid = null;
		
		while ((utid == null) && (_utidList.size() > 0)) {
			String prevUtid = _utidList.get(0);
			_utidList.remove(0);
			
			String complexRegex = "([0-9]+)";
			Pattern p = Pattern.compile(complexRegex,Pattern.CASE_INSENSITIVE);
			Matcher matcher = p.matcher(prevUtid);

			String ut = "";
			while (matcher.find()) {
				// Get all groups for this match
				
				// String[] groups = new String[matcher.groupCount()];
				for (int i = 0; i < matcher.groupCount(); i++) {
					if ((i == 0)) {
						try {
							ut = matcher.group(i);
						} catch (Exception e) {
							ut = "";					
							}
					}
				}
			}
			//Si se ha encontrado un ut valido se devolvera
			if (!ut.isEmpty()) utid = ut;
		}
	
		return utid;
	}
	
}
